package com.example.task4.service;

import com.example.task4.domain.Cake;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class ShoppingCart {
    Map<String, ShoppingItem> cart;
    int amount;

    public ShoppingCart() {
        cart=new HashMap<>();
        amount=0;
    }

    /**
     * 往购物车中添加蛋糕
     * @param cake 要添加的蛋糕对象
     * @param num 添加的蛋糕数量
     */
    public void addItem(Cake cake,int num){//商品加入到购物车
        // 如果购物车中已存在该蛋糕，则更新数量
        if(cart.containsKey(cake.getId())){
            ShoppingItem si=cart.get(cake.getId());
            si.setQuantity(si.getQuantity()+num);//原本有就增加数量
            cart.put(cake.getId(),si);
        }
        // 如果购物车中不存在该蛋糕，则创建新的购物项
        else{
            ShoppingItem si=new ShoppingItem(cake,num);
            cart.put(cake.getId(),si);
            amount++;
        }
    }


    /**
     * 获取购物车中所有商品
     * @return
     */
    public Collection<ShoppingItem> getItems(){
        return cart.values();
    }

    /**
     * 获取购物车中所有商品的总价
     * @return
     */
    public double getTotalPrice(){
        double total=0;
       for(ShoppingItem si:this.getItems()){
           total+=si.getSubTotal();
       }
       return total;
    }

    /**
     * 清空购物车中的商品
     */
    public void clear(){
        cart.clear();
    }

    /**
     * 移除购物车中的一项商品
     * @param id
     */
    public void removeItem(String id){
        cart.remove(id);
    }

    /**
     * 修改购物车中商品的数量
     * @param num
     */
    public void updateQuantity(String id,int num){
        if(cart.containsKey(id)){
            ShoppingItem si=cart.get(id);
            si.setQuantity(num);
            cart.put(id,si);
        }
        else{
           throw new IllegalArgumentException("购物车中没有找到ID为"+id+"的商品。");
        }
    }
    public int getAmount(){
        return amount;
    }

    /**
 * 判断购物车中是否包含指定ID的商品
 * @param id 商品ID
 * @return true表示存在，false表示不存在
 */
public boolean containsCake(String id) {
    return cart.containsKey(id);
}

}
